package com.dp1.pucp.Administracion.Controlador;

import CharliesCookies.MainController;
import com.dp1.pucp.Administracion.DAO.RRHHDAO;
import com.dp1.pucp.Administracion.Vista.MaquinariaGUI;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import com.dp1.pucp.Modelo.Clases.Maquina;
import com.dp1.pucp.Seguridad.DAO.LogDAO;
import com.dp1.pucp.Util.Validaciones;
import java.util.ArrayList;

public class MaquinariaControlador {
    
    private RRHHDAO m;
    private MaquinariaGUI MaquinariaView;
    private Maquina maq;
    private MantMaquinariaControlador MaquinariaControlador;
    private final static int ESTADO_ACTIVO = 1;
    
    public MaquinariaControlador(RRHHDAO dao, MaquinariaGUI view, MantMaquinariaControlador buc, Maquina maquina) {
        m = dao;
        MaquinariaView = view;
        MaquinariaControlador = buc;
        maq = maquina;
        MaquinariaView.llenaComboMaquina(m.listarTipoMaquina());
        MaquinariaView.llenaComboTipoMaquina(m.sacaDescripcion(MaquinariaView.getDescripcion()));
        MaquinariaView.listarEstado(m.listarEstado());
        
        if (maq != null) {
            MaquinariaView.setTitle("Editar Maquinaria");
            MaquinariaView.setFormMaquinaria(maq);
            MaquinariaView.setTipoMaquina(maq.getTipomaquina().getIdtipomaquina() - 1);
            
        } else {
            MaquinariaView.setTitle("Agregar Maquinaria");
        }
        
        MaquinariaView.addCancelarListener(new cancelarListener());
        MaquinariaView.addLimpiarListener(new limpiarListener());
        MaquinariaView.addGuardarListener(new guardarMaquinariaListener());
        MaquinariaView.addseleccionMaquinaListener(new seleccionMaquinaListener());
    }
    
    public String mensajeError() {
        String mensaje = "Corregir los siguientes datos:";
        
        if (MaquinariaView.getCantidad().isEmpty()) {
            mensaje += "\n- Ingresar Cantidad";
        }
        
        if (MaquinariaView.getEstado() == 0) {
            mensaje += "\n- Seleccionar Estado";
        }
        
        if (MaquinariaView.getFechaIngreso() == null) {
            mensaje += "\n- Ingresar Fecha de Nacimiento";
        }
        
        if (MaquinariaView.getProdMax().isEmpty()) {
            mensaje += "\n- Ingresar Producción Máxima";
        }
        
        return mensaje;
    }
    
    class guardarMaquinariaListener implements ActionListener {
        
        @Override
        public void actionPerformed(ActionEvent e) {
            ArrayList<Maquina> listaMaquina = new ArrayList<>();
            
            if (!(MaquinariaView.getCantidad().isEmpty() || MaquinariaView.getFechaIngreso().toString().isEmpty()
                    || MaquinariaView.getProdMax().isEmpty() || (MaquinariaView.getEstado() == 0))) {
                
                int cont = Integer.parseInt(MaquinariaView.getCantidad());
                for (int i = 0; i < cont; i++) {
                    Maquina p = new Maquina();
                    p.setCodigo(m.llenaCodigoMaquina(p));
                    p.setEstado(MaquinariaView.getEstado()-1);
                    p.setTipomaquina(MaquinariaView.getTipoMaquina());
                    p.setFechaIngreso(MaquinariaView.getFechaIngreso());
                    p.setMaxProduccion(Integer.parseInt(MaquinariaView.getProdMax()));
                    listaMaquina.add(p);
                }
                
                int confirmacion;
                if (maq != null) {
                    confirmacion = Validaciones.solicitarConfirmacionVal("¿Está seguro que desea modificar la máquina?");
                    if (confirmacion == 0) {
                        for (int i = 0; i < listaMaquina.size(); i++) {
                            Maquina p = new Maquina();
                            p = listaMaquina.get(i);
                            p.setIdmaquina(maq.getIdmaquina());
                            m.guardarMaquinaria(p);
                        }
                        MaquinariaView.mostrarAviso("Se modificó exitosamente la máquina.");
                        LogDAO.insertarLog(MainController.usuario, "Editar máquina");
                        MaquinariaView.dispose();
                    }
                } else {
                    confirmacion = Validaciones.solicitarConfirmacionVal("¿Está seguro que desea agregar las máquinas?");
                    if (confirmacion == 0) {
                        for (int i = 0; i < listaMaquina.size(); i++) {
                            Maquina p = new Maquina();
                            p = listaMaquina.get(i);
                            m.guardarMaquinaria(p);
                        }
                        MaquinariaView.mostrarAviso("Se guardó exitosamente la máquina.");
                        LogDAO.insertarLog(MainController.usuario, "Agregar máquina");
                        MaquinariaView.dispose();
                    }
                }
            } else {
                MaquinariaView.mostrarAviso(mensajeError());
            }
        }
    }
    
    class cancelarListener implements ActionListener {
        
        @Override
        public void actionPerformed(ActionEvent e) {
            int salida;
            if (maq != null) {
                salida = Validaciones.solicitarConfirmacionSalida("modificar máquina");
                if (salida == 0) {
                    LogDAO.insertarLog(MainController.usuario, "Salir modificar máquina");
                    MaquinariaView.dispose();
                }
            } else {
                salida = Validaciones.solicitarConfirmacionSalida("agregar máquina");
                if (salida == 0) {
                    LogDAO.insertarLog(MainController.usuario, "Salir agregar máquina");
                    MaquinariaView.dispose();
                }
            }
        }
    }
    
    class limpiarListener implements ActionListener {
        
        @Override
        public void actionPerformed(ActionEvent e) {
            MaquinariaView.LimpiarDatos();
        }
    }
    
    class seleccionMaquinaListener implements ItemListener {
        
        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {
                MaquinariaView.llenaComboTipoMaquina(m.sacaDescripcion(MaquinariaView.getDescripcion()));
            }
        }
    }
}
